#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"analyse2.h"
#include"gestion_capteurs.h"
#include"Personnel.h"
#define taille 100

 int convertir_fich_struct(events*ev)
{int i,n,j,k=0;

FILE *f;
f=fopen("/home/nesrine/ebola/events.txt","r");
if(f==NULL){
           printf("\n Impossible d'ouvrir le fichier %s","/home/nesrine/ebola/events.txt");
           }
else{
      i=0;
     while(fscanf(f,"%s%ld%s",ev->tps[i],&(ev->id[i]),ev->cap[i]) != EOF){
       i++;

       }
//printf("%d\n",i);

    }

//fclose(f);
return i;
}

void tri_id(events*ev,int N)
    {int i, j;
     long tampon;
     char tamponc[20],tampont[20] ;
        for (i=N-1; i>0; i--)
        {
            for (j=1; j<=i; j++)
            {
                if (ev->id[j-1]>ev->id[j])
                {
                    tampon=ev->id[j-1];
                    ev->id[j-1]=ev->id[j];
                    ev->id[j]=tampon;

                    strcpy(tamponc,ev->cap[j-1]);
                    strcpy(ev->cap[j-1],ev->cap[j]);
                    strcpy (ev->cap[j],tamponc);

                    strcpy(tampont,ev->tps[j-1]);
                    strcpy(ev->tps[j-1],ev->tps[j]);
                    strcpy(ev->tps[j],tampont);

                }
            }
        }
    }

int determiner_nbre_personnel(long t[],int n)
{int i,j;
 
 for(i=1;i<n;i++)
  {
    while((t[i]==t[i-1])&&(i<n))
    {
        for(j=i;j<n;j++)
        {
            t[j-1]=t[j];
        }
     n--;

    }
 }
return n;
}


void remplissage_tab_pers(int nbre_personnel,une_personne t[],events ev)
{int j=0;
 int i=0;  int k;
 do{ k=0;
     t[j].id=ev.id[i];
    do{
     strcpy(t[j].cap[k],ev.cap[i]);
     strcpy(t[j].tps[k],ev.tps[i]);
 
     k++;
     i++;
    }while((ev.id[i-1])==(ev.id[i]));
    j++;

 }while(j<nbre_personnel);
}

int chercher_alertes(int i,une_personne tab_pers[])
{
int j=0;
int  alerte=1, al_comp=1,al_lav=1 ;
while(alerte==1)
{
if(strcmp(tab_pers[i].cap[j],"Ebola")==0)
{alerte=0;
break;
}
else if (strcmp(tab_pers[i].cap[j],"E01")==0)
{
al_comp=alerte_comparaison(i,tab_pers);
al_lav=alerte_lavage(i,j,tab_pers);
alerte=al_comp*al_lav;
j=j+9;
}
else
 {
 j++;
 }
}

return alerte;
}

int alerte_comparaison(int i,une_personne tab_pers[])
  {char cp_rf[20][20];
   capteur c;
   int k=0;
int j,res1=1,res2=1;
  FILE*f;
  f=fopen("Liste_capteurs.txt","rb");
  while(fread(&c,sizeof(capteur),1,f)!=0)
   {	
     strcpy(cp_rf[k],c.cap);      
     k++;
   } 
  //fclose(f);

//={"E01","C01","S01","L01","C02","I01","L02","V01","D01"};
  
  for(j=0;j<k;j++)
  {
 if(strcmp(tab_pers[i].cap[j],cp_rf[j]))
    {  res1=0;
      break;
    }
  }
   
  return res1;
  }

 int alerte_lavage(int i,int j,une_personne t[])
{
  int nb1,nb2,res3=1;
  nb1=conversion_chaine_int(t[i].tps[j+6]);
  nb2=conversion_chaine_int(t[i].tps[j+7]);

  if((nb2-nb1)<500)
   {res3=0;
   }
   return res3;
}

int conversion_chaine_int(char chaine[])
   {int i;
       for(i=2;i<8;i++)
     { chaine[i]=chaine[i+1];
     }

    for(i=4;i<7;i++)
     { chaine[i]=chaine[i+1];
     }

       int nombre = atoi(chaine);
      return nombre;
   }

int remplissage_tal(int n,une_personne tab_pers[],long tab_alertes[])
{
 int k=0; 
 int alerte=1,i;
for(i=0;i<n;i++)
{ 
 alerte=chercher_alertes(i,tab_pers);
 if (alerte==0)
 {tab_alertes[k]=tab_pers[i].id;
 
//fclose(f);   
  k++;
 }
}

return k;
}

void afficher_tal(int k,long tal[],personnel p)
{int i=0;
FILE *f;
 printf("Les membres du personnel qui risquent d'avoir l'Ebola sont:\n");
 while(i<k)
  {
   printf("  ID =%ld\n",tal[i]);
   f=fopen("fichier_personnel","rb");
  if (f!=NULL){
  while((fread(&p,sizeof(personnel),1,f)!=0))
   {
	if (p.ID==tal[i])
	{printf(" Nom= %s \n Prenom= %s \n Poste= %s\n",p.nom,p.prenom,p.poste);}
    }
}
   i++;
  }
}

void analyse()
{personnel p; 
int i,j;
  events ev;
  int al_comp,al_lav;
  long tab_alertes[20];
  une_personne tab_pers[100];
   int n,k=0;

 int taille_fichier_events=convertir_fich_struct(&ev);
 
/*printf("votre fichier est le suivant :\n");
 for (i=0;i<taille_fichier_events;i++)
     { printf("%s\t%ld\t%s\n",ev.tps[i],ev.id[i],ev.cap[i]);
     }*/

 tri_id(&ev,taille_fichier_events);
 
/*printf("le fichier trié :\n ");
for(i=0;i<taille_fichier_events;i++)
{
    printf("%ld\t",ev.id[i]);
    printf("%s\t",ev.cap[i]);
    printf("%s\n",ev.tps[i]);
} */
long t[100];
for(i=0;i<taille_fichier_events;i++)
 {t[i]=ev.id[i];
 }
int nbre_personnel=determiner_nbre_personnel(t,taille_fichier_events);

//printf("nbre du personnel=%d\n",nbre_personnel);

remplissage_tab_pers(nbre_personnel,tab_pers,ev);

for (i=1;i<nbre_personnel;i++)
{printf("Le parcours de la personne %d ayant l'ID =%ld\n",i,tab_pers[i].id);
  for(j=0;j<taille_fichier_events;j++)
    {
    printf("%s\t",tab_pers[i].cap[j]);
    printf("%s\n",tab_pers[i].tps[j]);
    }
}
int nb_alertes=remplissage_tal(nbre_personnel,tab_pers,tab_alertes);

afficher_tal(nb_alertes,tab_alertes,p);

}
